﻿#pragma once

#include <xy/topo/mesh.h>

namespace xy
{

namespace topo
{

class trimesh : public mesh_t<3>
{
  public:
    /**
     * @brief 构造类型
     *
     */
    explicit trimesh() = default;

    /**
     * @brief 删除所有赋值和拷贝构造函数
     *
     */
    trimesh(trimesh &&) = delete;

    /**
     * @brief 获得相对的顶点
     *
     * @param[in] co
     * @return vertex_t *
     */
    vertex_t *opposite_vertex(coedge_t *co) const;

    /**
     * @brief 获得面上顶点相对的 coedge_t
     *
     * @param[in] f
     * @param[in] v
     * @return coedge_t *
     */
    coedge_t *opposite_coedge_t(face_t *f, vertex_t *v) const;

    /**
     * @brief Delaunay 翻转边
     *
     * @param[in] e
     * @return true
     * @return false
     */
    bool flip_edge(edge_t *e);
};

} // namespace topo

} // namespace xy
